<?php
declare (strict_types=1);

namespace app\admin\model\admin;

use think\Exception;
use app\BaseModel;
use think\exception\ValidateException;
use think\facade\Cache;
use think\facade\Db;

/**
 * @mixin \think\Model
 */
class User extends BaseUser
{
    // 追加读取器属性
    protected $append = ['dept_name', 'role_ids', 'role_names'];



    /**
     * 读取器，附加用户所属角色的信息
     * @return string
     */
    public function getRoleNamesAttr(): string
    {
        return implode(',', $this->roles()->column('name') ?: ['——']);
    }

    /**
     * 读取器，附加用户所属角色Id的信息
     * @return array
     */
    public function getRoleIdsAttr(): array
    {
        return $this->roles()->column('id');
    }

    /**
     * 读取器，附加用户所属角色的信息
     * @return string
     */
    public function getDeptNameAttr(): string
    {
        return $this->dept->name ?? '——';
    }


    /**
     * 一个用户属于一个部门
     * @return \think\model\relation\BelongsTo
     */
    public function dept(): \think\model\relation\BelongsTo
    {
        return $this->belongsTo(Dept::class, 'dept_id', 'id');
    }

    /**
     * 一个用户属于多个角色 一个角色拥有多个用户
     * @return \think\model\relation\BelongsToMany
     */
    public function roles(): \think\model\relation\BelongsToMany
    {
        return $this->belongsToMany(Role::class, 'admin_role_user', 'role_id', 'user_id');
    }

}
